// 动物管理控制器
const { Animal, Category, AnimalImage } = require('../models');
const { Op } = require('sequelize');
const { paginate, generatePagination } = require('../utils/tools');

// 显示动物列表
exports.showAnimals = async (req, res) => {
  try {
    const { page = 1, pageSize = 10, search = '', categoryId = '' } = req.query;
    
    // 构建查询条件
    const query = {};
    if (search) {
      query.name = { [Op.like]: `%${search}%` };
    }
    if (categoryId) {
      query.categoryId = categoryId;
    }
    
    // 获取分页数据
    const paginatedQuery = paginate(query, { page, pageSize });
    const { count, rows } = await Animal.findAndCountAll({
      where: paginatedQuery,
      include: ['category'],
      order: [['createdAt', 'DESC']]
    });
    
    // 生成分页信息
    const pagination = generatePagination(count, page, pageSize);
    
    // 获取所有分类
    const categories = await Category.findAll();
    
    res.render('animals/index', {
      title: '动物管理',
      animals: rows,
      pagination,
      search,
      categoryId,
      categories
    });
  } catch (error) {
    console.error('获取动物列表错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 显示添加动物页面
exports.showAddAnimal = async (req, res) => {
  try {
    const categories = await Category.findAll();
    res.render('animals/add', {
      title: '添加动物',
      categories
    });
  } catch (error) {
    console.error('获取分类信息错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 添加动物
exports.addAnimal = async (req, res) => {
  const { name, categoryId, imageUrl, shortDescription, classification } = req.body;
  
  try {
    // 创建动物
    const animal = await Animal.create({
      name,
      categoryId,
      imageUrl,
      shortDescription,
      classification
    });
    
    req.flash('success', '动物添加成功');
    res.redirect('/admin/animals');
  } catch (error) {
    console.error('添加动物错误:', error);
    req.flash('error', '添加动物失败');
    res.redirect('/admin/animals/add');
  }
};

// 显示编辑动物页面
exports.showEditAnimal = async (req, res) => {
  try {
    const animal = await Animal.findByPk(req.params.id, {
      include: ['category']
    });
    
    if (!animal) {
      req.flash('error', '动物不存在');
      return res.redirect('/admin/animals');
    }
    
    const categories = await Category.findAll();
    
    res.render('animals/edit', {
      title: '编辑动物',
      animal,
      categories
    });
  } catch (error) {
    console.error('获取动物信息错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 更新动物
exports.updateAnimal = async (req, res) => {
  const { name, categoryId, imageUrl, shortDescription, classification } = req.body;
  
  try {
    const animal = await Animal.findByPk(req.params.id);
    
    if (!animal) {
      req.flash('error', '动物不存在');
      return res.redirect('/admin/animals');
    }
    
    // 更新动物信息
    await animal.update({
      name,
      categoryId,
      imageUrl,
      shortDescription,
      classification
    });
    
    req.flash('success', '动物更新成功');
    res.redirect('/admin/animals');
  } catch (error) {
    console.error('更新动物错误:', error);
    req.flash('error', '更新动物失败');
    res.redirect(`/admin/animals/edit/${req.params.id}`);
  }
};

// 删除动物
exports.deleteAnimal = async (req, res) => {
  try {
    const animal = await Animal.findByPk(req.params.id);
    
    if (!animal) {
      req.flash('error', '动物不存在');
      return res.redirect('/admin/animals');
    }
    
    // 删除动物（级联删除相关图片）
    await animal.destroy();
    
    req.flash('success', '动物删除成功');
    res.redirect('/admin/animals');
  } catch (error) {
    console.error('删除动物错误:', error);
    req.flash('error', '删除动物失败');
    res.redirect('/admin/animals');
  }
};